package com.zjuee.base.utils;

import org.springframework.util.StringUtils;

import java.util.concurrent.ThreadLocalRandom;

public class StringsUtil {

    /**
     * 通过url截取文件名
     *
     * @param url
     * @return
     */
    public static String subUrl(String url) {
        if (StringUtils.isEmpty(url)) {
            return null;
        }

        int urlIndex = url.lastIndexOf("/");
        String fileName = url.substring(urlIndex + 1, url.length());
        int fileIndex = fileName.lastIndexOf("_");

        if (fileIndex == -1) {
            return fileName;
        }
        String[] ext = fileName.split("\\.");

        if (ext.length < 2) {
            return fileName;
        }
        return fileName.substring(0, fileIndex) + "." + ext[1];
    }

    /**
     * 将经纬度转换未度分秒格式
     *
     * @param d 经纬度
     * @return 转换后的经纬度
     */
    public static String transLongiAndLati(Double d) {
        if (d != null) {
            String[] array = d.toString().split("[.]");
            //得到度
            String degrees = array[0];

            Double m = Double.parseDouble("0." + array[1]) * 60;
            String[] array1 = m.toString().split("[.]");
            //得到分
            String minutes = array1[0];

            Double s = Double.parseDouble("0." + array1[1]) * 60;
            String[] array2 = s.toString().split("[.]");
            //得到秒
            String seconds = array2[0];
            return degrees + "-" + minutes + "-" + seconds;
        } else {
            return null;
        }
    }

    /**
     * 判断一个字符串是不是数字
     *
     * @param str
     * @return
     */
    public static boolean isNumeric(String str) {
        for (int i = str.length(); --i >= 0; ) {
            if (!Character.isDigit(str.charAt(i))) {
                return false;
            }
        }
        return true;
    }

    public static boolean isMatchType(Class<?> clazz, Object value) {
        return value.getClass().equals(clazz);
    }


    /**
     * 替换字符串中的特殊符号
     * @param str
     * @return
     */
    public static String replaceAllStr(String str) {
        if (!StringUtils.isEmpty(str)) {
            str = str.replaceAll("\\\\", "").replaceAll(":", "")
                    .replaceAll("&", "").replaceAll("=", "")
                    .replaceAll("\\+", "").replaceAll("\\|", "")
                    .replaceAll("%", "").replaceAll("/", "")
                    .replaceAll("\\?", "");
            return str;
        } else {
            return str;
        }

    }

    /**
     * 替换字符串中的特殊符号
     * @param str
     * @return
     */
    public static String replaceAllStrBySql(String str) {
        if (!StringUtils.isEmpty(str)) {
            str = str.toUpperCase();
            str = str.replaceAll("SELECT", "").replaceAll("CONCAT", "")
                    .replaceAll("AND", "").replaceAll(" OR ", "")
                    .replaceAll("DELETE", "").replaceAll("UPDATE", "")
                    .replaceAll("ADD", "").replaceAll("ALTER", "")
                    .replaceAll("CHAR", "").replaceAll("VARCHAR", "")
                    .replaceAll("VALUE", "").replaceAll("MD5", "")
                    .replaceAll("ALL", "").replaceAll("EXTRACT", "")
                    .replaceAll("WHERE", "").replaceAll("INSERT", "")
                    .replaceAll("LEFT", "").replaceAll("JOIN", "")
                    .replaceAll("ON", "").replaceAll("COUNT", "")
                    .replaceAll("//*", "").replaceAll("SUM", "");
            return str;
        } else {
            return str;
        }

    }

    public static String getRandNumberStr(int n) {
        StringBuilder s = new StringBuilder(n);
        for (int i = 0; i < n; i++) {
            s.append(getRandomInt(10));
        }
        return s.toString();
    }

    /**
     * 获得一个[0,max)之间的随机数
     *
     * @param max 最大值(不包括)
     * @return 一个[0，max)之间的随机数
     */
    public static int getRandomInt(int max) {
        return getRandom().nextInt(max);
    }

    public static ThreadLocalRandom getRandom() {
        return ThreadLocalRandom.current();
    }
}